// ignore_for_file: non_constant_identifier_names
import 'package:ichinesereader/models/assessment/assessmentBookType.dart';
import 'package:ichinesereader/models/book/BookLevelColor.dart';
import 'package:ichinesereader/models/book/Options.dart';
import 'package:ichinesereader/models/common/LevelOption.dart';
import 'package:ichinesereader/models/common/NanhaiLocale.dart';
import 'package:ichinesereader/models/common/SelectOption.dart';
import 'package:ichinesereader/models/common/TimeZones.dart';
import 'package:flutter/material.dart';
import 'package:ichinesereader/models/common/assignmentState.dart';
import 'package:ichinesereader/models/book/ProgramTypes.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:ichinesereader/models/evaluation/evaluationSkillType.dart';
import 'package:syncfusion_flutter_charts/charts.dart';

import 'models/common/NanhaiLicence.dart';

//////// api addresses
// https://superbe.ichinesereader.com/superadmin/swagger-ui.html
// https://api.ichinesereader.com/studentmanager/swagger-ui.html
// https://api.ichinesereader.com/schoolmanager/swagger-ui.html
// https://api.ichinesereader.com/superadmin/swagger-ui.html
// https://api.ichinesereader.com/usermanager/swagger-ui.html#/

var seen = Set<String>();
var seen2 = Set<String>();

class Constants {
  static List<String> timeZones = timeZonesFromJson(TimeZoneJson);
  static List<LevelOption> levelOptions = levelOptionFromJson(LevelColorJson);
  static List<LevelOption> levelOverallOptions =
      levelOptionFromJson(LevelsOverallJson);
  static List<LevelOption> levelEvaluationOptions =
      levelOptionFromJson(LevelEvaluationColorJson);

  static List<LevelOption> actflEvaluationOptions = bookLevelColors
      .where((item) => seen.add(item.actflLevel!))
      .where((item) =>
          item.actflLevel! != "N/A" && item.actflLevel!.indexOf("Adv") == -1)
      .map((e) => new LevelOption(
          value: e.actflLevel!.replaceAll(" ", ""),
          label: e.actflLevel,
          color: '#${e.actflColor!.value.toRadixString(16)}'))
      .toList();
  static List<LevelOption> hskEvaluationOptions = bookLevelColors
      .where((item) => seen2.add(item.hskLevel!))
      .where((item) => int.tryParse(item.hskLevel!.replaceAll("HSK ", ""))! < 6)
      .map((e) => new LevelOption(
          value: e.hskLevel!.replaceAll(" ", ""),
          label: e.hskLevel,
          color: '#${e.hskColor!.value.toRadixString(16)}'))
      .toList();

//dotenv.env['VAR_NAME'];
  static String BaseAPI = dotenv.env['BaseAPI'].toString();
  static String BaseAPISuper = dotenv.env['BaseAPISuper'].toString();
  static String BaseURL = dotenv.env['BaseURL'].toString();
  static String BaseDomain = dotenv.env['BaseDomain'].toString();

  // update prod env for ICA base on dotenv.env['BaseAPI']
  static String BaseAPIICA =
      dotenv.env['BaseAPI'].toString().indexOf('migration') > 0
          ? 'https://testapi.ichineseaplus.com/'
          : 'https://api.ichineseaplus.com/';

//book resource base url
  static const String BaseResources = 'https://resources.ichinesereader.com/';
  static const String CleverClientId = '4d9f39b930beee5d53b2';

  static const double DefinedScreenSmallSize = 640;
  static const double DefinedScreenMediumSize = 1007;
  static const double DefinedScreenBigSize = 1440;

  static const Map<String, String> NanhaiRoles = {
    'student': 'STUDENT',
    'teacher': 'TEACHER',
    'schoolAdmin': 'SCHOOLADMIN',
    'individual': 'INDIVIDUAL',
    'parent': 'PARENT'
  };
  static const int pageLimit = 20;
  static const String NanhaiRole_Student = 'STUDENT';
  static const String NanhaiRole_Teacher = 'TEACHER';
  static const String NanhaiRole_SchoolAdmin = 'SCHOOLADMIN';
  static const String NanhaiRole_Individual = 'INDIVIDUAL';
  static const String NanhaiRole_Parent = 'PARENT';

  static const String AssessmentType_Placement = 'PRE_TEST';
  static const String AssessmentType_AP = 'AP';
  static const String AssessmentType_Running_Record = 'RUNNING_RECORD';
  static const String AssessmentType_Customize = 'CUSTOMIZE';
  static const String AssessmentType_IBSpeaking = 'IB SPEAKING';
  static const String AssessmentType_BENCHMARK_TEST = 'BENCHMARK_TEST';
  static const String AssessmentType_BENCHMARK_BOOK = 'BENCHMARK_BOOK';
  static const String AssessmentType_SOCIAL_STUDIES = 'SOCIAL_STUDIES';
  static const String AssessmentType_EVALUATION = 'EVALUATION';
  static const String AssessmentType_TEA_HOUSE = 'CHINESE_TEA_HOUSE';

  static List<AssessmentBookType> assessmentBookTypes = [
    AssessmentBookType(
        displayName: 'RUNNING_RECORD',
        orderNumber: 0,
        assessmentType: 'RUNNING_RECORD'),
    AssessmentBookType(
        displayName: 'IB_SPEAKING',
        orderNumber: 1,
        assessmentType: 'IBDP_AB,IBDP_BSL,IBDP_BHL'),
  ];

  static List<String> assessmentTypes = [
    'RUNNING_RECORD',
    'IBDP_AB',
    'IBDP_BSL',
    'IBDP_BHL',
    'AP_PATHWAY'
  ];

  static List<AssessmentBookType> evaluationTypes = [
    AssessmentBookType(
        displayName: 'Evaluation',
        orderNumber: 0,
        assessmentType: AssessmentType_EVALUATION),
    //  AssessmentBookType(
    //   displayName: 'Benchmark Book',
    //   orderNumber: 1,
    //   assessmentType: 'BENCHMARK_BOOK'),
    AssessmentBookType(
        displayName: 'Benchmark Test',
        orderNumber: 1,
        assessmentType: AssessmentType_BENCHMARK_TEST),
  ];

  static List<AssessmentBookType> quizBookTypes = [
    AssessmentBookType(
        displayName: 'AP', orderNumber: 0, assessmentType: AssessmentType_AP),
    AssessmentBookType(
        displayName: 'Social Studies',
        orderNumber: 1,
        assessmentType: AssessmentType_SOCIAL_STUDIES),
    // AssessmentBookType(
    //   displayName: 'Chinese Tea House',
    //   orderNumber: 2,
    //   assessmentType: AssessmentType_TEA_HOUSE),
  ];

  static List<String> assessmentKinds = [
    'LISTENING',
    'SPEAKING',
    'READING',
    'WRITING',
    'TEST',
    'CUSTOMIZE',
  ];

  static List<ProductLicences> productLicences = [
    ProductLicences(
        title: 'IChineseReader',
        lable: 'icr',
        text: 'IChineseReaderText',
        button: 'Subscription'),
    ProductLicences(
        title: 'IChinesePlus',
        lable: 'ica',
        text: 'IChinesePlusText',
        button: 'Buy')
  ];
  static List<ICRType> icrTypes = [
    ICRType(title: 'Subscription Yearly \$ 79.99'),
    ICRType(title: 'Subscription Monthly \$ 7.99'),
  ];
  static List<ICAType> icaTypes = [
    ICAType(title: 'AP TEST BANK \$ 19.95'),
    ICAType(title: 'AP MOCK EXAM \$ 29.95'),
    ICAType(title: 'AP BUNDLING \$ 39.95'),
  ];

  static List<NanhaiLocale> nanhaiLocales = [
    NanhaiLocale(
        order: 0, key: 'en', displayName: 'ENG', locale: Locale('en', 'US')),
    NanhaiLocale(
        order: 1, key: 'cn', displayName: '简体', locale: Locale('zh', 'CN')),
    NanhaiLocale(
        order: 2, key: 'tc', displayName: '繁体', locale: Locale('zhHant', 'TW')),
    // NanhaiLocale(
    //     order: 3, key: 'ko', displayName: '한국인', locale: Locale('ko', 'KO'))
  ];

  static const String Mandarin = "Mandarin";
  static const String Cantonese = "Cantonese";
  static const String Simplified = "Simplified";
  static const String Traditional = "Traditional";

  static List<SelectOption> audioOptions = [
    SelectOption(value: Mandarin, label: Mandarin),
    SelectOption(value: Cantonese, label: Cantonese),
    SelectOption(value: "No_audio", label: "No Audio"),
  ];

  static List<SelectOption> textOptions = [
    SelectOption(value: Simplified, label: Simplified),
    SelectOption(value: Traditional, label: Traditional),
    SelectOption(value: "No text", label: "No Text"),
  ];

  static List<SelectOption> textSearchOptions = [
    SelectOption(value: Mandarin, label: Mandarin),
    SelectOption(value: Cantonese, label: Cantonese),
  ];

  static List<AssignmentState> assignmentStateOptions = [
    AssignmentState(value: 'live', label: 'OPEN'),
    AssignmentState(value: 'queued', label: 'QUEUED'),
    AssignmentState(value: 'past', label: 'CLOSED'),
  ];

  static List<ProgramType> nanhaiProgramTypeList = [
    ProgramType(
        programName: "IMMERSION",
        displayName: "Immersion",
        orderNumber: 1,
        programId: '59fdd7a586444f5963a55d9b'),
    ProgramType(
        programName: "FOREIGN_LANGUAGE",
        displayName: "Foreign Language",
        orderNumber: 2,
        programId: '59fdd7a586444f5963a55d9c'),
    ProgramType(
        programName: "HERITAGE",
        displayName: "Heritage",
        orderNumber: 3,
        programId: '59fdd7a586444f5963a55d9d'),
    ProgramType(
        programName: "AP_CHINESE",
        displayName: "AP Chinese",
        orderNumber: 4,
        programId: '6840ef1c-4ebd-4eba-9975-211fd72dc3ac'),
    ProgramType(
        programName: "IB_CHINESE",
        displayName: "IB Chinese",
        orderNumber: 5,
        programId: 'd24d517f-0cdd-4900-89b9-ccfcd2c9a610')
  ];

  static List<DropdownMenuItem> nanhaiImmersionSubProgramsDropdown = [
    DropdownMenuItem(
        value: '570b73f2-95c9-11ec-8fc3-00ffe3295c37', child: Text('K-2')),
    DropdownMenuItem(
        value: 'e23149e6-b285-414f-ac8a-0ae5016268db', child: Text('3-5')),
    DropdownMenuItem(
        value: "5e6533a6-95c9-11ec-8fc3-00ffe3295c37", child: Text("6-8")),
  ];

  static List<DropdownMenuItem> nanhaiSubProgramsDropdown = [
    DropdownMenuItem(
        value: '570b73f2-95c9-11ec-8fc3-00ffe3295c37',
        child: Text('Immersion K-2')),
    DropdownMenuItem(
        value: 'e23149e6-b285-414f-ac8a-0ae5016268db',
        child: Text('Immersion 3-5')),
    DropdownMenuItem(
        value: "5e6533a6-95c9-11ec-8fc3-00ffe3295c37",
        child: Text("Immersion 6-8")),
    DropdownMenuItem(
        value: '46b5b137-68be-4bc3-af41-1169e71efb34',
        child: Text('IB Chinese PYP')),
    DropdownMenuItem(
        value: 'f8f7764c-805c-4fe2-9103-4c43541f093b',
        child: Text('IB Chinese MYP')),
    DropdownMenuItem(
        value: "e2655d64-06f5-4126-a887-a855c16c6447",
        child: Text("IB Chinese DP-Ab Initio")),
    DropdownMenuItem(
        value: "dd90baf1-9344-49e8-b615-ca9a4a256004",
        child: Text("IB Chinese DP-Chinese B")),
    // DropdownMenuItem(
    //     value: "4640ad92-95d4-11ec-8fc3-00ffe3295c37",
    //     child: Text("Second Language K-8")),
    DropdownMenuItem(
        value: "544514c5-95d4-11ec-8fc3-00ffe3295c37",
        child: Text("Second Language 9-12")),
    DropdownMenuItem(
        value: "6840ef1c-4ebd-4eba-9975-211fd72dc3ac",
        child: Text("Second Language - AP Chinese")),
    // DropdownMenuItem(
    //     value: "68003050-95d4-11ec-8fc3-00ffe3295c37",
    //     child: Text("Second Language - University")),
  ];

//skill color  #1c84c6
  static List<EvaluationSkillType> evaluationSkillTypes = [
    EvaluationSkillType(
        skill: 'Listening',
        color: '#ed5565',
        image: 'assets/images/evaluation/listening.png'),
    EvaluationSkillType(
        skill: 'Reading',
        color: '#23c6c8',
        image: 'assets/images/evaluation/reading.png'),
    EvaluationSkillType(
        skill: 'Speaking',
        color: '#f8ac59',
        image: 'assets/images/evaluation/speaking.png'),
    EvaluationSkillType(
        skill: 'Writing',
        color: '#1ab394',
        image: 'assets/images/evaluation/writing.png'),
    EvaluationSkillType(
        skill: 'AI Speaking',
        color: '#9d98f4',
        image: 'assets/images/evaluation/ai_speaking.png'),
  ];

  static List<String> levelStandardTypes = ['ICR', 'ACTFL', 'HSK', 'YCT'];
  static List<String> overviewChartModes = ['EVALUATION', 'BENCHMARK'];
  static List<String> profileTabs = ['Profile', 'Password', 'Payment Method'];
  static List<EvaluationSkillType> evaluationLinguisticTypes = [
    EvaluationSkillType(
        skill: 'Grammar',
        color: '#ed5565',
        image: '',
        weight: 1,
        value: 'grammar'),
    EvaluationSkillType(
        skill: 'Words',
        color: '#23c6c8',
        image: '',
        weight: 1,
        value: 'phrase'),
    EvaluationSkillType(
        skill: 'Syllables',
        color: '#f8ac59',
        image: '',
        weight: 1,
        value: 'syllable'),
    EvaluationSkillType(
        skill: 'Characters',
        color: '#1ab394',
        image: '',
        weight: 1,
        value: 'word'),
  ];

  static List<PlotBand> plotbandACTFL = <PlotBand>[
    PlotBand(
        isVisible: true,
        start: -0.5,
        end: 0.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: Color.fromRGBO(225, 243, 255, 1)),
    PlotBand(
        isVisible: true,
        start: 0.5,
        end: 1.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(200, 233, 250, 1)),
    PlotBand(
        isVisible: true,
        start: 1.5,
        end: 2.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(174, 224, 247, 1)),
    PlotBand(
        isVisible: true,
        start: 2.5,
        end: 3.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(241, 247, 235, 1)),
    PlotBand(
        start: 3.5,
        end: 4.5,
        isVisible: true,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(230, 244, 221, 1)),
    PlotBand(
        isVisible: true,
        start: 4.5,
        end: 5.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(220, 236, 207, 1)),
    PlotBand(
        start: 5.5,
        end: 6.5,
        isVisible: true,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(253, 243, 231, 1)),
    PlotBand(
        isVisible: true,
        start: 6.5,
        end: 7.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(252, 232, 206, 1)),
  ];

  static List<PlotBand> plotbandIChineseReader = <PlotBand>[
    PlotBand(
        isVisible: true,
        text: '',
        textAngle: 0,
        verticalTextAlignment: TextAnchor.middle,
        horizontalTextAlignment: TextAnchor.middle,
        verticalTextPadding: '-7',
        start: -0.5,
        end: 3.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: Color.fromRGBO(225, 243, 255, 1)),
    PlotBand(
        isVisible: true,
        start: 3.5,
        end: 5.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(200, 233, 250, 1)),
    PlotBand(
        isVisible: true,
        start: 5.5,
        end: 7.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(174, 224, 247, 1)),
    PlotBand(
        isVisible: true,
        start: 7.5,
        end: 10.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(241, 247, 235, 1)),
    PlotBand(
        start: 10.5,
        end: 13.5,
        isVisible: true,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(230, 244, 221, 1)),
    PlotBand(
        isVisible: true,
        start: 13.5,
        end: 16.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(220, 236, 207, 1)),
    //// 到20级的数据，不要删除
    PlotBand(
        start: 16.5,
        end: 18.5,
        isVisible: true,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(253, 243, 231, 1)),
    PlotBand(
        isVisible: true,
        start: 18.5,
        end: 19.5,
        textStyle: const TextStyle(color: Colors.black, fontSize: 13),
        color: const Color.fromRGBO(252, 232, 206, 1)),
  ];

  static const List<CategoricalMultiLevelLabel> levelAxisCategories =
      <CategoricalMultiLevelLabel>[
    const CategoricalMultiLevelLabel(
        start: '1', end: '4', text: 'Novice-Low', level: 0),
    const CategoricalMultiLevelLabel(
        start: '5', end: '6', text: 'Novice-Mid', level: 0),
    const CategoricalMultiLevelLabel(
        start: '7', end: '8', text: 'Novice-High', level: 0),
    const CategoricalMultiLevelLabel(
        start: '9', end: '11', text: 'Interm-Low', level: 0),
    const CategoricalMultiLevelLabel(
        start: '12', end: '14', text: 'Interm-Mid', level: 0),
    const CategoricalMultiLevelLabel(
        start: '15', end: '17', text: 'Interm-High', level: 0),
    const CategoricalMultiLevelLabel(
        start: '18', end: '19', text: 'Adv-Low', level: 0),
    const CategoricalMultiLevelLabel(
        start: '20', end: '20', text: 'Adv-High', level: 0),
    const CategoricalMultiLevelLabel(
        start: '1', end: '4', text: 'HSK 1', level: 1),
    const CategoricalMultiLevelLabel(
        start: '5', end: '8', text: 'HSK 2', level: 1),
    const CategoricalMultiLevelLabel(
        start: '9', end: '11', text: 'HSK 3', level: 1),
    const CategoricalMultiLevelLabel(
        start: '12', end: '14', text: 'HSK 4', level: 1),
    const CategoricalMultiLevelLabel(
        start: '15', end: '17', text: 'HSK 5', level: 1),
    const CategoricalMultiLevelLabel(
        start: '18', end: '20', text: 'HSK 6', level: 1),
  ];

  static List<LevelColor> bookLevelColors = [
    LevelColor(
      level: 0,
      color: '#808080',
      actflLevel: 'N/A',
      actflColor: Color.fromRGBO(252, 232, 206, 1),
      hskLevel: 'HSK 7',
      hskColor: Color.fromRGBO(58, 11, 11, 1),
    ),
    LevelColor(
      level: 1,
      color: '#d91c2a',
      actflLevel: 'Novice-Low',
      actflColor: Color.fromRGBO(225, 243, 255, 1),
      hskLevel: 'HSK 1',
      hskColor: Color.fromRGBO(189, 196, 255, 1),
    ),
    LevelColor(
      level: 2,
      color: '#dc3e2c',
      actflLevel: 'Novice-Low',
      actflColor: Color.fromRGBO(225, 243, 255, 1),
      hskLevel: 'HSK 1',
      hskColor: Color.fromRGBO(189, 196, 255, 1),
    ),
    LevelColor(
      level: 3,
      color: '#de5a2a',
      actflLevel: 'Novice-Low',
      actflColor: Color.fromRGBO(225, 243, 255, 1),
      hskLevel: 'HSK 1',
      hskColor: Color.fromRGBO(189, 196, 255, 1),
    ),
    LevelColor(
      level: 4,
      color: '#f5831f',
      actflLevel: 'Novice-Low',
      actflColor: Color.fromRGBO(225, 243, 255, 1),
      hskLevel: 'HSK 1',
      hskColor: Color.fromRGBO(189, 196, 255, 1),
    ),
    LevelColor(
      level: 5,
      color: '#f89c1b',
      actflLevel: 'Novice-Mid',
      actflColor: Color.fromRGBO(200, 233, 250, 1),
      hskLevel: 'HSK 2',
      hskColor: Color.fromRGBO(112, 129, 247, 1),
    ),
    LevelColor(
      level: 6,
      color: '#f7ba1a',
      actflLevel: 'Novice-Mid',
      actflColor: Color.fromRGBO(200, 233, 250, 1),
      hskLevel: 'HSK 2',
      hskColor: Color.fromRGBO(112, 129, 247, 1),
    ),
    LevelColor(
      level: 7,
      color: '#ffe600',
      actflLevel: 'Novice-High',
      actflColor: Color.fromRGBO(174, 224, 247, 1),
      hskLevel: 'HSK 2',
      hskColor: Color.fromRGBO(112, 129, 247, 1),
    ),
    LevelColor(
      level: 8,
      color: '#e4e11b',
      actflLevel: 'Novice-High',
      actflColor: Color.fromRGBO(174, 224, 247, 1),
      hskLevel: 'HSK 2',
      hskColor: Color.fromRGBO(112, 129, 247, 1),
    ),
    LevelColor(
      level: 9,
      color: '#bcd530',
      actflLevel: 'Interm-Low',
      actflColor: Color.fromRGBO(241, 247, 235, 1),
      hskLevel: 'HSK 3',
      hskColor: Color.fromRGBO(47, 60, 150, 1),
    ),
    LevelColor(
      level: 10,
      color: '#8dc43e',
      actflLevel: 'Interm-Low',
      actflColor: Color.fromRGBO(241, 247, 235, 1),
      hskLevel: 'HSK 3',
      hskColor: Color.fromRGBO(47, 60, 150, 1),
    ),
    LevelColor(
      level: 11,
      color: '#57b947',
      actflLevel: 'Interm-Low',
      actflColor: Color.fromRGBO(241, 247, 235, 1),
      hskLevel: 'HSK 3',
      hskColor: Color.fromRGBO(47, 60, 150, 1),
    ),
    LevelColor(
      level: 12,
      color: '#35a86d',
      actflLevel: 'Interm-Mid',
      actflColor: Color.fromRGBO(230, 244, 221, 1),
      hskLevel: 'HSK 4',
      hskColor: Color.fromRGBO(130, 47, 47, 1),
    ),
    LevelColor(
      level: 13,
      color: '#009991',
      actflLevel: 'Interm-Mid',
      actflColor: Color.fromRGBO(230, 244, 221, 1),
      hskLevel: 'HSK 4',
      hskColor: Color.fromRGBO(130, 47, 47, 1),
    ),
    LevelColor(
      level: 14,
      color: '#0089a3',
      actflLevel: 'Interm-Mid',
      actflColor: Color.fromRGBO(230, 244, 221, 1),
      hskLevel: 'HSK 4',
      hskColor: Color.fromRGBO(130, 47, 47, 1),
    ),
    LevelColor(
      level: 15,
      color: '#0073ae',
      actflLevel: 'Interm-High',
      actflColor: Color.fromRGBO(220, 236, 207, 1),
      hskLevel: 'HSK 5',
      hskColor: Color.fromRGBO(108, 26, 26, 1),
    ),
    LevelColor(
      level: 16,
      color: '#3d63ae',
      actflLevel: 'Interm-High',
      actflColor: Color.fromRGBO(220, 236, 207, 1),
      hskLevel: 'HSK 5',
      hskColor: Color.fromRGBO(108, 26, 26, 1),
    ),
    LevelColor(
      level: 17,
      color: '#64469c',
      actflLevel: 'Interm-High',
      actflColor: Color.fromRGBO(220, 236, 207, 1),
      hskLevel: 'HSK 5',
      hskColor: Color.fromRGBO(108, 26, 26, 1),
    ),
    LevelColor(
      level: 18,
      color: '#7f4098',
      actflLevel: 'Adv-Low',
      actflColor: Color.fromRGBO(253, 243, 231, 1),
      hskLevel: 'HSK 6',
      hskColor: Color.fromRGBO(58, 11, 11, 1),
    ),
    LevelColor(
      level: 19,
      color: '#9d3c95',
      actflLevel: 'Adv-Low',
      actflColor: Color.fromRGBO(253, 243, 231, 1),
      hskLevel: 'HSK 6',
      hskColor: Color.fromRGBO(58, 11, 11, 1),
    ),
    LevelColor(
      level: 20,
      color: '#bd3c79',
      actflLevel: 'Adv-High',
      actflColor: Color.fromRGBO(252, 232, 206, 1),
      hskLevel: 'HSK 6',
      hskColor: Color.fromRGBO(58, 11, 11, 1),
    ),
  ];

  static List<String> allMonths = [
    'Jan',
    'Feb',
    'Mar',
    'Apr',
    'May',
    'Jun',
    'Jul',
    'Aug',
    'Sep',
    'Oct',
    'Nov',
    'Dec'
  ];

  static List<Options> timeRanges = [
    new Options(label: "All", value: 0),
    new Options(label: "Last 7 days", value: 7),
    new Options(label: "Last 15 days", value: 15),
    new Options(label: "Last 30 days", value: 30),
    new Options(label: "Last 90 days", value: 90),
    new Options(
        label: "Last year",
        value: DateTime.now()
            .difference(DateTime(DateTime.now().year - 1, DateTime.now().month,
                DateTime.now().day))
            .inDays),
    new Options(label: "Custom", value: "*")
  ];

  static List<Options> timeRangesWithoutCustom = [
    new Options(label: "All", value: 0),
    new Options(label: "Last 7 days", value: 7),
    new Options(label: "Last 15 days", value: 15),
    new Options(label: "Last 30 days", value: 30),
    new Options(label: "Last 90 days", value: 90),
    new Options(
        label: "Last year",
        value: DateTime.now()
            .difference(DateTime(DateTime.now().year - 1, DateTime.now().month,
                DateTime.now().day))
            .inDays),
  ];

  static List<Options> termOptions = [
    new Options(label: "1 Year", value: 1),
    new Options(label: "2 Years", value: 2),
    new Options(label: "3 Years", value: 3),
  ];

  static List<Options> activities = [
    new Options(label: "Login", value: "LOGIN"),
    new Options(label: "Logout", value: "LOGOUT"),
    new Options(label: "Quiz", value: "QUIZ"),
    new Options(label: "Read", value: "READ"),
    new Options(label: "Writing", value: "WRITING"),
    new Options(label: "Recording", value: "RECORDING"),
    new Options(label: "Level Change", value: "LEVEL_UP"),
  ];

  static List<Options> entries = [
    new Options(label: "Assignment", value: "ASSIGNMENT"),
    new Options(label: "Assessment", value: "ASSESSMENT"),
    new Options(label: "Open/Progress Reading", value: "BOOK_READING"),
  ];

  static List<Options> dateFilters = [
    new Options(label: "Create Date", value: "created"),
    new Options(label: "Start Date", value: "startDateUTC"),
    new Options(label: "Due Date", value: "endDateUTC"),
  ];

  static List<Options> statusFilters = [
    new Options(label: "New", value: "SUBMITTED"),
    new Options(label: "Processing", value: "PROCESSING"),
    new Options(label: "Graded", value: "COMPLETED"),
  ];
  static const int InitDay = 90;

  static List<String> studentPersonalReportTabs = [
    "Overview",
    "Skills",
    "Activities",
    "Self Reading",
    "Homework",
    "Assessment",
    "Level Progress"
  ];

  static const List<String> TargetLevel = [
    'Early in Level',
    'At Level',
    'Above Level'
  ];
  static const List<String> ReportTypes = [
    'writing',
    'reading',
    'listening',
    'speaking'
  ];

  static const String LevelColorJson = '''
[{"value":"pre","label":"Pre","color":"#808080"},
{"value":"level1","label":"Level 1","color":"#d91c2a"},
{"value":"level2","label":"Level 2","color":"#dc3e2c"},
{"value":"level3","label":"Level 3","color":"#de5a2a"},
{"value":"level4","label":"Level 4","color":"#f5831f"},
{"value":"level5","label":"Level 5","color":"#f89c1b"},
{"value":"level6","label":"Level 6","color":"#f7ba1a"},
{"value":"level7","label":"Level 7","color":"#ffe600"},
{"value":"level8","label":"Level 8","color":"#e4e11b"},
{"value":"level9","label":"Level 9","color":"#bcd530"},
{"value":"level10","label":"Level 10","color":"#8dc43e"},
{"value":"level11","label":"Level 11","color":"#57b947"},
{"value":"level12","label":"Level 12","color":"#35a86d"},
{"value":"level13","label":"Level 13","color":"#009991"},
{"value":"level14","label":"Level 14","color":"#0089a3"},
{"value":"level15","label":"Level 15","color":"#0073ae"},
{"value":"level16","label":"Level 16","color":"#3d63ae"},
{"value":"level17","label":"Level 17","color":"#64469c"},
{"value":"level18","label":"Level 18","color":"#7f4098"},
{"value":"level19","label":"Level 19","color":"#9d3c95"},
{"value":"level20","label":"Level 20","color":"#bd3c79"},
{"value":"level0","label":"Level 0","color":"#808080"}]
''';

  static const String LevelsOverallJson = '''
[{"value":"level1","label":"Level 1","color":"#d91c2a"},
{"value":"level2","label":"Level  2","color":"#dc3e2c"},
{"value":"level3","label":"Level 3","color":"#de5a2a"},
{"value":"level4","label":"Level 4","color":"#f5831f"},
{"value":"level5","label":"Level 5","color":"#f89c1b"},
{"value":"level6","label":"Level 6","color":"#f7ba1a"},
{"value":"nm-assessment","label":"Novice Mid Benchmark Assessment","color":"#f7ba1a"},
{"value":"level7","label":"Level 7","color":"#ffe600"},
{"value":"level8","label":"Level 8","color":"#e4e11b"},
{"value":"level9","label":"Level 9","color":"#bcd530"},
{"value":"nh-assessment","label":"Novice High Benchmark Assessment","color":"#bcd530"},
{"value":"level10","label":"Level 10","color":"#8dc43e"},
{"value":"level11","label":"Level 11","color":"#57b947"},
{"value":"level12","label":"Level 12","color":"#35a86d"},
{"value":"il-assessment","label":"Intermediate Low Benchmark Assessment","color":"#35a86d"},
{"value":"level13","label":"Level 13","color":"#009991"},
{"value":"level14","label":"Level 14","color":"#0089a3"},
{"value":"im-assessment","label":"Intermediate Mid Benchmark Assessment","color":"#0089a3"},
{"value":"level15","label":"Level 15","color":"#0073ae"},
{"value":"level16","label":"Level 16","color":"#3d63ae"},
{"value":"level17","label":"Level 17","color":"#64469c"},
{"value":"ih-assessment","label":"Intermediate High Benchmark Assessment","color":"#64469c"},
{"value":"level18","label":"Level 18","color":"#7f4098"},
{"value":"level19","label":"Level 19","color":"#9d3c95"},
{"value":"level20","label":"Level 20","color":"#bd3c79"}]
''';

  static const String LevelEvaluationColorJson = '''
[{"value":"level1","label":"Level 1","color":"#d91c2a"},
{"value":"level2","label":"Level 2","color":"#dc3e2c"},
{"value":"level3","label":"Level 3","color":"#de5a2a"},
{"value":"level4","label":"Level 4","color":"#f5831f"},
{"value":"level5","label":"Level 5","color":"#f89c1b"},
{"value":"level6","label":"Level 6","color":"#f7ba1a"},
{"value":"level7","label":"Level 7","color":"#ffe600"},
{"value":"level8","label":"Level 8","color":"#e4e11b"},
{"value":"level9","label":"Level 9","color":"#bcd530"},
{"value":"level10","label":"Level 10","color":"#8dc43e"},
{"value":"level11","label":"Level 11","color":"#57b947"},
{"value":"level12","label":"Level 12","color":"#35a86d"},
{"value":"level13","label":"Level 13","color":"#009991"},
{"value":"level14","label":"Level 14","color":"#0089a3"},
{"value":"level15","label":"Level 15","color":"#0073ae"},
{"value":"level16","label":"Level 16","color":"#3d63ae"},
{"value":"level17","label":"Level 17","color":"#64469c"}]
''';

  static const String ActflEvaluationColorJson = '''
[{"value":"NOVICE_LOW","label":"NOVICE_LOW","color":"#e1f3ff"},
{"value":"NOVICE_MID","label":"NOVICE_MID","color":"#c8e9fa"},
{"value":"NOVICE_HIGH","label":"NOVICE_HIGH","color":"#aee0f7"},
{"value":"INTERM_LOW","label":"INTERM_LOW","color":"#f1f7eb"},
{"value":"INTERM_MID","label":"INTERM_MID","color":"#e6f4dd"},
{"value":"INTERM_HIGH","label":"INTERM_HIGH","color":"#dceccf"}]
''';

  static const String HskEvaluationColorJson = '''
[{"value":"HSK1","label":"HSK1","color":"#bdc4ff"},
{"value":"HSK2","label":"HSK2","color":"#7081f7"},
{"value":"HSK3","label":"HSK3","color":"#2f3c96"},
{"value":"HSK4","label":"HSK4","color":"#822f2f"},
{"value":"HSK5","label":"HSK5","color":"#6c1a1a"}]
''';

  static const Map<String, String> recommendedTags = {
    'Self & Management': 'assets/images/lowLevel/self.jpg',
    'Family & Friends': 'assets/images/lowLevel/family.jpg',
    'Culture & Festivals': 'assets/images/lowLevel/holiday.jpg',
    'Food': 'assets/images/lowLevel/food.jpg',
    'Feelings': 'assets/images/lowLevel/feeling.jpg',
    'Animal': 'assets/images/lowLevel/animal.jpg',
    'Plant': 'assets/images/lowLevel/plant.jpg',
    'Weather': 'assets/images/lowLevel/weather.jpg',
    'Time': 'assets/images/lowLevel/time.jpg',
    'Geography': 'assets/images/lowLevel/geography.jpg',
    'Materials & Properties': 'assets/images/lowLevel/material.jpg',
    'Environment': 'assets/images/lowLevel/environment.jpg',
    'School': 'assets/images/lowLevel/school.jpg',
    'Communities': 'assets/images/lowLevel/community.jpg',
    'Transportation': 'assets/images/lowLevel/traffic.jpg',
    'Celebrities': 'assets/images/lowLevel/famous.jpg',
    'Fiction': 'assets/images/lowLevel/fiction.jpg',
    'Math': 'assets/images/lowLevel/math.jpg',
    'Arts': 'assets/images/lowLevel/art.jpg',
    'Sports & Hobbies': 'assets/images/lowLevel/sport.jpg',
    'Poem': 'assets/images/lowLevel/poem.jpg',
  };

  ///time zones
  static const String TimeZoneJson = '''
["Eniwetok, Kwajalein(GMT -12:00) ",
"Midway Island, Samoa(GMT -11:00) ",
"Hawaii(GMT -10:00) ","Alaska(GMT -9:00) ",
"Pacific Time(GMT -8:00) ",
"Mountain Time(GMT -7:00) ",
"Central Time(GMT -6:00) ",
"Eastern Time(GMT -5:00) ",
"Atlantic Time(GMT -4:00) ",
"Newfoundland(GMT -3:30) ",
"Brazil, Buenos Aires, Georgetown(GMT -3:00) ",
"Mid-Atlantic(GMT -2:00) ",
"Azores, Cape Verde Islands(GMT -1:00) ",
"Western Europe Time, London, Lisbon, Casablanca(GMT) ",
"Brussels, Copenhagen, Madrid, Paris(GMT +1:00) ",
"Kaliningrad, South Africa(GMT +2:00) ",
"Baghdad,Riyadh,Moscow,St.Petersburg(GMT+3:00) ",
"Tehran(GMT +3:30) ",
"Abu Dhabi, Muscat, Baku, Tbilisi(GMT +4:00) ",
"Kabul(GMT +4:30) ",
"Ekaterinburg, Islamabad, Karachi, Tashkent(GMT +5:00) ",
"Bombay, Calcutta, Madras, New Delhi(GMT +5:30) ",
"Kathmandu(GMT +5:45) ",
"Almaty, Dhaka, Colombo(GMT +6:00) ",
"Bangkok, Hanoi, Jakarta(GMT +7:00) ",
"Beijing, Perth, Singapore, Hong Kong(GMT +8:00) ",
"Tokyo, Seoul, Osaka, Sapporo, Yakutsk(GMT +9:00) ",
"Adelaide, Darwin(GMT +9:30) ",
"Eastern Australia, Guam, Vladivostok(GMT +10:00) ",
"Magadan, Solomon Islands, New Caledonia(GMT +11:00) ",
"Auckland, Wellington, Fiji, Kamchatka(GMT +12:00) "]
''';
}

enum NanhaiBookReadingTypes {
  library,
  leveled,
  favorite,
  search,
  assignment,
  assessment,
  textbook,
  theme,
  evaluation,
  progressReadingHistory,
  other
}

enum NanhaiBookKnowledgeTypes { wordcard, grammar, quickReview }

enum ACTFLLevel {
  NOVICE_LOW,
  NOVICE_MID,
  NOVICE_HIGH,
  INTERM_LOW,
  INTERM_MID,
  INTERM_HIGH
}
